<?php defined('SYSPATH') or die('No direct script access.');
/**
 * Created by PhpStorm.
 * Author: ls
 * Time: 2020/06/12 13:32
 * Desc: 小程序CMS系统公共操作方法
 */
class Model_Api_Standard_Pub
{
    /**
     * @function 获取产品所属模块
     * @param $typeid
     * @return bool|string
     */
    public static function get_model_class_name($typeid)
    {
        $pinyin =DB::select('maintable')->from('model')->where('id','=',$typeid)->execute()->get('maintable');
        if(empty($pinyin))
        {
            return false;
        }
        return  'Model_'.ucfirst($pinyin);
    }

    /**
     * @function 检查会员是否有效
     * @param $mid
     * @return array
     */
    public static function check_member_effective($mid)
    {
        $result = array('status'=>false, 'msg'=>'无效账号');
        if (!empty($mid))
        {
            $sql="SELECT mid FROM sline_member WHERE mid='{$mid}' LIMIT 1";
            $ar = DB::query(Database::SELECT, $sql)->execute()->as_array();
            if ($ar)
            {
                $result = array('status'=>true, 'msg'=>'有效账号');
            }
        }
        return $result;
    }


    /**
     * @function 获取小程序分销二维码
     * @param $xcxurl
     * @param $id
     * @param $fxcode
     * @param $access_token
     * @return mixed
     */
    public static function getWxcode($xcxurl,$id,$fxcode,$access_token){
        $ACCESS_TOKEN = $access_token['access_token'];
        $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$ACCESS_TOKEN;
        $post_data = array(
            'page'=> $xcxurl,
            'scene'=>'id='.$id.'&scene='.$fxcode
        );
        $post_data = json_encode($post_data);
        $data   = self::send_post($url,$post_data);
        $result = self::data_uri($data,'image/png');
        return $result;
    }


    /**
     * @function 消息推送http
     * @param $url
     * @param $post_data
     * @return bool|string
     */
    public static function send_post( $url, $post_data ) {
        $options = array(
            'http' => array(
                'method'  => 'POST',
                'header'  => 'Content-type:application/json',
                //header 需要设置为 JSON
                'content' => $post_data,
                'timeout' => 60
                //超时时间
            )
        );
        $context = stream_context_create( $options );
        $result = file_get_contents( $url, false, $context );
        return $result;
    }

    /**
     * @function 二进制转图片image/png
     * @param $contents
     * @param $mime
     * @return string
     */
    public static function data_uri($contents, $mime)
    {
        $base64   = base64_encode($contents);
        return ('data:' . $mime . ';base64,' . $base64);
    }

    /**
     * @function 发起http请求
     * @param string $url 访问路径
     * @param array $params 参数，该数组多于1个，表示为POST
     * @param int $expire 请求超时时间
     * @param array $extend 请求伪造包头参数
     * @param string $hostIp HOST的地址
     * @return array    返回的为一个请求状态，一个内容
     */
    public static function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = '')
    {
        if (empty($url)) {
            return array('code' => '100');
        }

        $_curl = curl_init();
        $_header = array(
            'Accept-Language: zh-CN',
            'Connection: Keep-Alive',
            'Cache-Control: no-cache'
        );
        // 方便直接访问要设置host的地址
        if (!empty($hostIp)) {
            $urlInfo = parse_url($url);
            if (empty($urlInfo['host'])) {
                $urlInfo['host'] = substr(DOMAIN, 7, -1);
                $url = "http://{$hostIp}{$url}";
            } else {
                $url = str_replace($urlInfo['host'], $hostIp, $url);
            }
            $_header[] = "Host: {$urlInfo['host']}";
        }

        // 只要第二个参数传了值之后，就是POST的
        if (!empty($params)) {
            curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));
            curl_setopt($_curl, CURLOPT_POST, true);
        }

        if (substr($url, 0, 8) == 'https://') {
            curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        }
        curl_setopt($_curl, CURLOPT_URL, $url);
        curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');
        curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);

        if ($expire > 0) {
            curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间
            curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间
        }

        // 额外的配置
        if (!empty($extend)) {
            curl_setopt_array($_curl, $extend);
        }

        $result['result'] = curl_exec($_curl);
        $result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);
        $result['info'] = curl_getinfo($_curl);
        if ($result['result'] === false) {
            $result['result'] = curl_error($_curl);
            $result['code'] = -curl_errno($_curl);
        }

        curl_close($_curl);
        return $result;
    }



    /**
     * @function base64 图片保存并返回路径
     * @param $base64_image_content
     * @param $path string 保存文件路径
     * @param string $filename 不传使用时间戳作为文件名
     * @return bool|string
     */
    public static function base64_image_content($base64_image_content,$path,$filename = '')
    {
        //匹配出图片的格式
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
            // 图片后缀
            $type = $result[2];
            // 根目录
            $dir  = rtrim(BASEPATH . '/', '\\../');
            // 存放文件夹
            $new_file = $dir;
            // 循环查询文件是否存在
            $fileArr = explode('/',$path);
            foreach ($fileArr as $fileV)
            {
                if($fileV)
                {
                    $new_file .= '/'.$fileV;
                    if(!file_exists($new_file)){
                        //检查是否有该文件夹，如果没有就创建
                        mkdir($new_file, 0777);
                    }
                }
            }

            // 图片名
            $filename = $filename ? $filename : time().rand('100000','999999');
            $img = $filename.".{$type}";

            $new_filename = $new_file.'/'.$img; // 文件存放位置
            $resUrl = $path.$img; // 保存成功后返回全路径
            // 检查文件是否存在
            if(file_exists($new_filename)){
                //检查是否有该文件夹，如果没有就创建
                return $resUrl;
            }

            // 保存文件
            if (file_put_contents($new_filename, base64_decode(str_replace($result[1], '', $base64_image_content))))
            {
                return $resUrl;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /**
     * @param $type
     * @param $key
     * @param string $value
     * @return bool|mixed
     * 缓存设置与获取
     */
    public static function cache($type, $key, $value = '')
    {
        $cache_dir = CACHE_DIR . 'v5/html';
        if (!file_exists($cache_dir))
        {
            mkdir($cache_dir, 0777, true);
        }
        $cache = Cache::instance('default');
        //获取缓存
        if ($type == 'get')
        {
            return $cache->get($key, '');
        }
        //设置缓存
        else if ($type == 'set' && mb_stripos($value, '没有找到符合条件的产品') === false)
        {
            return $cache->set($key, $value, 3600);
        }

    }
}